package org.wdzl.netty.demo;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.sctp.nio.NioSctpServerChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;

/**
 * @author Administrator
 * @desc netty项目
 */
public class HelloNettyServer {

    public static void main(String[] args) throws Exception{
        // 创建一组线程池组
        // 主线程池：用于接受客户端的请求链接，不做任何处理
        NioEventLoopGroup group1 = new NioEventLoopGroup();
        // 从线程池: 主线程池会把任务交给它,让其做任务
        NioEventLoopGroup group2 = new NioEventLoopGroup();

        try {
            // 创建服务器启动类
            ServerBootstrap serverBootstrap = new ServerBootstrap();
            // 设置主从线程组
            serverBootstrap.group(group1, group2)
                    // 设置nio双向通道
                .channel(NioServerSocketChannel.class)
                    // 添加子处理器,用于处理从线程池的任务
                .childHandler(new HelloNettyServerInitializer());
            // 启动服务，并且设置端口号, 同时启动方式为同步
            ChannelFuture channelFuture = serverBootstrap.bind(8888).sync();
            // 监听关闭的channel,设置为同步方式
            channelFuture.channel().closeFuture().sync();
        } finally {
            group1.shutdownGracefully();
            group2.shutdownGracefully();
        }
    }

}